Important Notes for Microsoft® Windows® Platform SDK for Pocket PC

To locate material in these Release Notes, select one of the general categories under Contents, or choose Find from the Edit menu of the browser.

Contents:

General Information and Requirements

Welcome to the Microsoft® Windows® Platform SDK for Pocket PC. A lot of work continues to go into making the Windows Platform SDK a great tool for your Windows CE development. For more information on Windows CE development see this Microsoft Web site. While visiting the Web site, subscribe to Windows CE Wire. Windows CE Wire is a mailing list that keeps you up to date with the latest news related to Windows CE, the Microsoft operating system platform built for portable computing, multimedia, and embedded solutions. You can register for Windows CE Wire, the biweekly newsletter of developments, announcements, tips, tricks, and techniques for Windows CE at: http://www.microsoft.com/windowsce/community/newsbyemail.asp .

Please continue using the Windows CE Platform SDK, and providing us with your valuable feedback.

Thank you,

The Windows CE Platform SDK Team

Running the SDK

To run this SDK, you should have one of the following systems installed on your desktop computer:

What's New for the Pocket PC SDK

Among the new features for the Pocket PC SDK are a moveable emulation window, improved Host Serial Port support, improved ITL communications handshaking, Ethernet support for connection to Microsoft® ActiveSync™ 3.1, and a Startup Wizard.

Recommended Installation Procedure

The Pocket PC SDK is designed to provide tools for building applications for Pocket PC devices. This release includes emulation support for the Pocket PC.

The Pocket PC SDK does not include the cross-compilers needed for developing binaries that run on Pocket PC devices. These compilers are included in Microsoft® eMbedded Visual C++ 3.0 or Microsoft® eMbedded Visual Basic 3.0, or in a C/C++ development environment that supports Windows CE.

The Windows CE Platform SDK allows you to uninstall the SDK. However, because the kit is delivered in updates, the uninstall will remove all the components present. Any removed component can be added by reinstalling it.

Installation Order

If the Pocket PC SDK is installed on a machine with no installation of Microsoft® eMbedded Visual Tools 3.0, you may experience a setup error regarding the registration of the CEMGRUI.dll. You may safely ignore this error and successfully complete the SDK setup. Follow the SDK setup with an installation of eMbedded Visual Tools 3.0.

However, the Help content for the Pocket PC SDK will not appear correctly unless it is installed after all other tools and SDKs.

To Build for the Device

Install Microsoft® eMbedded Visual C++ 3.0, another C/C++ compiler, or Microsoft® eMbedded Visual Basic 3.0.

Install the Pocket PC SDK

Install Microsoft® ActiveSync™ 3.1.

To Build for Emulation Only

To ensure proper functionality of emulation you need to run Windows NT 4.0 with Service Pack 5 or Windows 2000. Emulation on Windows 95/98 is not supported.

Install Microsoft® eMbedded Visual C++ 3.0, another C/C++ compiler, or Microsoft® eMbedded Visual Basic 3.0.

To Install the Pocket PC SDK

These installation instructions create an environment in which Pocket PC samples can be built using NMAKE from the command line for eMbedded Visual C++ 3.0. Projects are automatically built and run to emulation in eMbedded Visual Basic 3.0 using the run command.

To Build for Both Emulation and the Device

To ensure proper functionality of emulation you need to run Windows NT 4.0 with Service Pack 5 or Windows 2000. Emulation on Windows 95/98 is not supported.

Pocket PC and ActiveX Components for eMbedded Visual Basic

When installing the Pocket PC SDK, make sure to select ActiveX components for eVB in the Custom Installation dialog box. Pocket PC projects do not show up on a device if the Pocket PC SDK had been installed without ActiveX components. The ActiveX component selection in the Custom Installation dialog is checked by default.

"Powered by Microsoft Windows CE for Pocket PC" Logo Program

The “Powered by Microsoft Windows CE” Logo program was developed to help users identify hardware and software products that are compatible with the Windows CE operating system. Users can be assured that the products bearing this logo will use the technologies integrated into this operating system. Participants in the logo program share the benefits of Microsoft’s investment in these trademarks.

To find out more about the logo program for the Pocket PC visit http://www.microsoft.com/windowsce/products/support/logo.asp .

Building Within Microsoft eMbedded Visual C++ 3.0

Two new wizards in the eMbedded Visual C++ 3.0 IDE enable you to create both Win32 and MFC (.exe) applications tailored specifically for the Pocket PC.

To build within eMbedded Visual C++ 3.0

  1. Install Microsoft® eMbedded Visual C++ 3.0.
  2. Install the Microsoft Windows Platform SDK for Pocket PC. Microsoft® ActiveSync™ 3.1 is highly recommended.
  3. Start eMbedded Visual C++.
  4. Create a new workspace.
  5. Select a WCE configuration.
  6. Insert your code files and compile or build.

Note   You can add a new supported configuration for the current platform to your project by choosing Configuration from the Build menu and adding a new platform.

Setting the WCE configuration

The Program arguments in the Debug tab do not change when you set the WCE configuration.

The libraries do not change when you change the WCE configuration between the Pocket PC and H/PC.

Tools You Should Know About

WM_HIBER.exe is a tool included in the emulation object store for each platform. WM_HIBER allows the user to send WM_HIBERNATE messages to all applications or only chosen applications. The user can launch it from the Run dialog, by double-clicking its icon in Windows Explorer, or by calling CreateProcess. Windows CE applications may respond to this message, which the system may send in low memory conditions. But in emulation, low memory conditions aren't encountered, and Windows NT does not send this message. WM_HIBER.exe allows you to see how your application behaves when it is sent a WM_HIBERNATE message.

Running WM_HIBER.exe places an icon in the Taskbar Tray. Double-clicking this icon brings up a dialog that allows the user to enter the window to which the WM_HIBERNATE message should be sent. Alternatively, the user can select to broadcast the message to all applications.

REGSVRCE.exe allows COM server DLLs to be registered. REGSVRCE has the following command line options:

REGSVRCE [/u] [/s] DLLName

/u
Unregister the server
/s
Silent operation

WM_HIBER.exe is located in the object store. REGSVRCE.exe can be found in the <target install>\WCE300\MS Pocket PC\target\<cpu> directory.

Documentation

The documentation included with the Windows CE Platform SDK is updated for Windows CE version 3.0. The documentation will continue to be updated until the final product ships.

Today Screen messages

The following Today Screen API messages from TodayCmn.h are not listed in the Pocket PC API Reference.

Instead, these messages are described in the Help topic Customizing Today Items.

The COOKIE Structure

The COOKIE structure is not needed on the device or when using the InkEng.dll on the desktop. The RichInk.DLL on the desktop actually requires a slightly different COOKIE structure be used:

#ifdef RTF_FILTER
typedef struct tagCOOKIE 
{
    IStream *pstm;
    BOOL     bFirstCallback;
    PWD_PASSWORDDATA *ppwdPWData;
    BOOL    bLoss;
} COOKIE, * PCOOKIE;
#else
typedef struct tagCOOKIE {
    HANDLE hFile;
    LPBYTE pbStart;
    LPBYTE pbCur;
    LONG   bCount;
    DWORD  dwError;
    DWORD  *opaqueStructure;    // Used by InkWriter to send data to itself
} COOKIE, * PCOOKIE;
#endif

Use the InkEng.DLL so that you won't need to pass a pointer to any specific structure. InkEng.DLL is installed with ActiveSync 3.1--when Note Sync is activated--in the \Program Files\Common Files\Microsoft Shared\Notesync Forms. Normally when passing a cookie, it can be any 32 bit address or number.

Known Problems

There are known problems in the following areas:

General

Some Processors Improperly Handle DST

A notification set to go off on Pocket PC emulation and ARM processors will occur late or not at all if the DST check box is not checked in the Date/Time applet.

Unable to Reinstall Transcriber

The CoFreeUnusedLibraries function requires a timeout--default of 10 minutes--to expire before the DLL component will be unloaded. This breaks Transcriber since it needs to unload its IM in order to complete a reinstall.

Uninstallation of the Pocket PC SDK and SDKs exported by the Microsoft® Windows® Platform Builder 3.0

If you are uninstalling the Microsoft® Windows® Platform SDK for Pocket PC and one or more custom SDKs exported by the Microsoft® Windows® Platform Builder 3.0, it is strongly recommended that you uninstall the Pocket PC SDK last. Uninstalling the Pocket PC SDK will cause device connectivity problems for any exported SDKs that remain on the machine. However, a reinstallation, or a new installation of your exported SDK will correct this problem.

Canceled Pocket PC SDK Uninstall Does Not Re-instate All Files

Please note that following a cancelled uninstallation of the Microsoft® Windows® Platform SDK for Pocket PC, you may experience problems building applications using the eMbedded Visual Tools. It is suggested that you repair any cancelled uninstallations of the SDK using the following steps.

  1. Start the Pocket PC SDK setup program.
  2. Select the Repair option in the Program Maintenance dialog.

SHCreateMenuBar fails for simple application

To avoid SHCreateMenuBar failure the following steps must be completed for a Pocket PC application generated without the WCE Pocket PC App Wizard. Also, afxres.h should be removed if the user does not have the MFC Support installed with the SDK, as this will prevent the application from compiling.

  1. After creating an empty project using eMbedded Visual C++, copy newres.h to the application folder.
  2. Add changes under the Resource Includes Dialog under 'Read-only symbol directives':
    #include "newres.h"  ( instead of #include "afxres.h" )
  3. Build and execute the Pocket PC application.

Adding a Bitmap to the Menubar

If you add a bitmap into menubar, add the bitmapID in the code before calling SHCreateMenuBar. The following code snippet provides an example.

HWND CreateRpCommandBar(HWND hwnd)
{
    SHMENUBARINFO mbi;

    memset(&mbi, 0, sizeof(SHMENUBARINFO));
    mbi.cbSize     = sizeof(SHMENUBARINFO);
    mbi.hwndParent = hwnd;
    mbi.nToolBarId = IDM_MENU;
    mbi.hInstRes   = hInst;
    mbi.nBmpId     = 0; // Pass into the BitmapID that is generated by Resource Editor
    mbi.cBmpImages = 0; // Pass into the number of BmpImages

    if (!SHCreateMenuBar(&mbi)) 
        return NULL;

    return mbi.hwndMB;
}

User must manually insert WINS server address into registry

Currently NetReg does not attempt to register the machine name over a RAS connection. This is because RAS DHCP addresses (such as the WINS server) are not stored in the registry, and without the addresses NetReg will not attempt any operation.

Since the redirector is not present in the Pocket PC OS, NetReg will not work unless the user (or someone) manually puts the address of the WINS server into the registry.

(TAPI) GetMessage Function Hangs

Some Windows CE TAPI application programs hang in GetMessage( ) waiting for a message to the primary thread that never arrives. TAPI messages are sent directly to the callback function and the first message the primary thread gets is a timeout. On NT, the GetMessage( ) call is necessary and the program hangs if a delay loop is substituted. If the GetMessage( ) call is replaced by Sleep(50) followed by PeekMessage( ), the program works on both NT and CE.

Z-order Issues

In some cases the z-order of windows, including dialogs and menus, may be set wrong on an initial drawing of the affected window.

Default Size of an eMbedded Visual Basic InputBox

By default, the size of a Windows CE Visual Basic InputBox will exceed the size of the Pocket PC desktop area.

Certain Settings Cause Text Display Error on a Form for Visual Basic

When designing a label on a form for Visual Basic, setting AutoStyle to True and BorderStyle to Fixed Single causes Windows CE to not fully display the text on the label.

WCE MFC App Wizard Generates Code Errors

Under certain conditions, the WCE MFC App Wizard (DLL) generates code for your new project that is not correct. If you create a new DLL App Wizard project, the following error may show when building for the Pocket PC:

fatal error C1189: #error : OLE classes not supported for Pocket PC.

To avoid the DLL App Wizard problem

and Win32\Voicerec.

The Pocket PC SDK CEPC bin files are not compatible with the video drivers in 486 CEPCs. Pentium CEPCs do not have any compatibility problem.

Missing MENU_HEIGHT

In order to create a main window correctly, you must enter the following string in your application header file:

#define MENU_HEIGHT 26

Infrared Communication Socket Call May Not Complete

IrSquirt will re-use a socket for connection attempts if the connection fails. On a "successful" connect, IrDA will return connection pending to AFD and will call the ConnectComplete callback function when the connection confirmation is received. However, AFD does not wait for ConnectComplete before successfully completing the WinSock connection request.

(TAPI) Some Modems Dial Without Waiting for Dial Tone

Some modems will attempt to dial a telephone number without first waiting for a dial tone. When configuring Dial-Up networking, setting the "Wait for dial tone before dialing" in the "Dialing Properties" dialog box may have unreliable results, depending on the type of modem you are using.

Registry Key Settings for Digital Cellular Adapter

When using the datascope for the DoCoMo digital cellular adapter, insert the following settings into the HKEY_LOCAL_MACHINE\Drivers\PCMCIA registry key:

[HKEY_LOCAL_MACHINE\Drivers\PCMCIA\DataScope_for_DoCoMo-1.00-5D8C]
"Tsp"="Unimodem.dll"
"DeviceArrayIndex"=dword:1
"Prefix"="COM"
"Dll"="Serial.Dll"
"DeviceType"=dword:3
"ResetDelay"=dword:5DC
"FriendlyName"="DataScope for DoCoMo"

GetLastError Does Not Function in Emulation

Because the CE Emulation GDI functions do not SetLastError() when there is an error, GetLastError() does not work under emulation.

Samples

Hello Sample

Under the topic "Sample Code for a Pocket PC," the description for the Hello sample incorrectly states that the sample "Creates a window and draws a 'Hello Palm-size PC' text in the middle of the window." The sample actually draws "Hello Pocket PC" to the screen.

Modifying an .RC file for the CalendarandDtp sample

If you modify a sample .RC file and then begin getting "error RC2104 : undefined keyword or key name: I_IMAGENONE" please comment out the #include <commctrl.h> in resource.h if it exists. The CalendarandDtp sample is known to have this problem.

OLEDB Simple Provider sample

The OLEDB Simple Provider sample is not included in the list of samples provided in the Pocket PC Help. OLEDB Simple Provider is located in the following directory.

\MS Pocket PC\samples\win32\OLEDB Simple Provider

To build a sample both eMbedded Visual C++ and eMbedded Visual Basic should be used.

Currency entry for the ChkBook Sample (SH3 only)

Only 2 digits of currency may be entered. This is due to a problem with the iterator for vararg arguments smaller than 4 bytes.

This will be fixed in the final release.

Compilation error for some samples if MFC is not installed

Applications created with the Microsoft eMbedded Visual C++ IDE wizards and some samples depend on the MFC portion of the SDK being installed in order to build.

Samples Not Supported for Emulation

Emulation

To make the best use of emulation in your development cycle it is important to understand how emulation works and what its limitations are.

Architecturally emulation is a subset of the Windows CE OS used on Windows for the Pocket PC, ported to run on Windows NT. Windowing and process handling are not ported in this procedure. Windowing, process handling and memory management are all passed down to Windows NT. As a result, there are subtle differences between emulation and the device in each of these areas. With this in mind, the model for development using emulation should become clearer. While the fidelity of emulation is not absolute in relation to a real device, it does offer many benefits over development directly on a device.

Pocket PC Emulation does not respond if a sample is executed while the Palm-size PC 1.2 emulator is running on Win2000 German or Japanese machines

If the emulator stops responding when changing between Pocket PC and other Windows CE emulators, please use task manager to end the following processes: filesys.exe, device.exe, cesrvr.exe, and cemgrc.exe. It may also be necessary to restart eMbedded Visual C++ or eMbedded Visual Basic.

Minimizing and Restoring remote tools connected to emulation can cause it the emulator to stop responding

If the user encounters this condition that they should disconnect the remote tool from the emulator and reconnect, which will allow the emulator to begin responding again.

Files and folders are not visible on the emulation screen until you refresh

If the CreateFile API was used to create a file or the DeleteFile API was used to delete a file, then the emulation screen will not appear to be updated until the screen is refreshed.

Similar refresh problems occur when copying and pasting files and folders in emulation using the copy and paste options from the pop-up menu in emulation.

Emulator requires TCP/IP to be installed for connection

In order to create a connection, TCP/IP must be installed on the desktop.

Calendar Application

In order to view appointments in the calendar application for Pocket PC emulation, please choose View->Day from the menu and choose the day containing the appointment.

Input Panel

In the event the input panel control does not respond under emulation, hold the mouse button until a context menu appears and then click the control you wish to enter data in. It should now be possible to use the input panel window to enter data.

Character Recognizer Input Method Does not Function Properly

The handwriting recognition dll is not included for emulation. Please test handwriting recognition code on the device.

Part of Today screen can turn gray

Moving the emulator during startup or when an application is starting may result in unexpected behavior. If you experience problems, exit the emulator and restart.

API Return Error Codes Inconsistent with the Device

The following API return error codes inconsistent with a Pocket PC device.

These API should be tested on a device only.

Euro currency symbol appears as a square under Owner Information

Entering Euro currency symbols in fields on the Owner Information page of the Today screen will create symbols that look like squares.

Emulation fails with German string in installation path

Emulation fails with a German string in installation path.

Clock Settings

The user cannot change the desktop clock via the emulator. The call will still return true but the clock will not change.

Emulation display of maths1, maths2 and maths3 different from the device

On the device, the vertical and horizontal line was drawn with a straight end. In emulation, the lines were drawn with a round edge.

Emulator should be used side by side with eMbedded Visual Basic 3.0

When using the eMbedded Visual Basic tookit to develop emulation applications, a z-ordering problem can make the emulator inaccessible when the eMbedded Visual Basic Integrated Development Environment (eVB IDE) is positioned over the emulator (even partially). For optimal accessibility to the emulator you should use these two applications side by side on your development workstation.

Emulation Shell Fails to Restart After Exit

If you exit an emulation shell and immediately attempt to restart it, the restart attempt will fail.

Using Visual Basic Forms in Emulation

To use Visual Basic forms in Pocket PC emulation, you must install the Pocket PC SDK after you install eMbedded Visual Basic 3.00. If you install eMbedded Visual Basic 3.00 after you install the Pocket PC SDK, you must uninstall and reinstall the Pocket PC SDK. You need at least 2 MB of storage memory and 2 MB of RAM to run a debug version of MFC ActiveX controls on a MIPS Pocket PC device.

Low Memory Causes Loss of Input Panel in Emulation

Under low memory situations, you may not be able to access the input panel. To access the input panel you must free memory by closing applications on the desktop.

IR File Transfers Not Supported in Emulation

The Pocket PC's emulation environment does not support IR file transfers.

Microsoft Office Manager Causes Emulation Menus to Misfunction

If the Microsoft Office Manager is running and you experience problems with emulation menus, set the Microsoft Office Manager’s properties to Auto hide.

To Run Emulation Applications from Windows NT Explorer or FileManager

Running emulation applications from the Windows NT Explorer or FileManager is not directly supported. If you wish to do so, you must modify your system or user path environment variable from the System applet in the Control Panel. The path to the emulator window directory, typically C:\Windows CE Tools\wce300\MS Pocket PC\emulation\pocketpc\windows, must be added to your path. Microsoft does not recommend this method due to potential conflict with other emulation environments. Use the Emulation Environment for the Pocket PC menu item instead, and run the sample from the command line using the fully qualified name of the executable.

Setting a Calendar Entry Requires a Restart of Emulation

Because of the differences in architecture of emulation and the Pocket PC, emulation needs to be restarted after setting a calendar entry for the reminder to be emitted.

Manual Shutdown of Processes Required When an Application Causes the Emulator to Fail

In the rare case that an application causes the emulator to fail, it may become necessary to manually shutdow certain emulation processes from NT's taskmanager. The process that should be terminated is: shell32.exe. You may also need to manually terminate your application.

OK Button May Disappear Under Emulation

Under Emulation, when using certain dialogs, the "OK" button may disappear as the mouse passes out of the dialog client area to the menu bar. The work around for this problem is to mouse click back in the client area of the dialog, at this point the "OK" button should reappear and be usable.

Multiple Instances of Applications Can Be Run Under Emulation

Unlike actual hardware, this version of the emulator allows for multiple instances of a particular app to run concurrently. A previous instance of an application should be terminated prior to restarting another instance.

Emulation Debugging Information

The Windows CE Platform SDK now provides a debugging window that can be turned on or off with a registry setting.

The registry key is as follows:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows CE Platform SDK\Debug]

"OutputWindow"="None"

After you install the Platform SDK, OutputWindow is set to the default None. If you decide to obtain debug information, this value should be changed to Debugger or Console. Debugger directs all debug information to the active debugger—IDE debugger or WinDBG. Console directs all debug information to each individual console window of applications (including filesys, device, explorem) currently running under the emulation.

To print debugging information to this window, NKDbgPrintfW() must be called. NKDbgPrintfW() is prototyped in DBGAPI.h.

APIs That Behave Differently Under Emulation

Windows CE Emulation relies on underlying Windows NT/2000 functionality. Therefore applications may be able to do more in emulation than on a Windows CE device. If you use an API parameter that is not defined in Windows CE, the result may be different on the device. The following section discusses all known emulation differences.

CeGetThreadPriority and CeSetThreadPriority are not currently supported for emulation.

FindFirstFileEx: Call always passes on emulation regardless if the same call fails on the device. For example, calls with invalid parameters will still pass under emulation.

GetOpenFileName: On the device, the hwndOwner member of the OpenFileName parameter passed to GetOpenFileName can be NULL. In emulation, however, the hwndOwner member must be set to a valid window before calling GetOpenFileName, as in the following example:

    ofn.hwndOwner=hwndMain;
    GetOpenFileName(&ofn);

SipSetDefaultRect does not work properly under emulation at this time.

When passed an invalid handle, the following Windows CE GDI functions will set the error state returned by GetLastError() to ERROR_SHARING_VIOLATION rather than the proper error state of ERROR_INVALID_HANDLE.

SetBkMode()
GetBkMode()
SetBkColor()
GetBkColor()
CreateBitMap()

Applications running under emulation cannot change Windows NT settings via the Get* or Set* APIs.

When using CreateBitmap() to create bitmaps with 2, 4 or 8 bits per pixel, a monochrome bitmap will always be returned.

When running in emulation, 2-bits-per-pixel bitmaps are not supported.

The coordinates from the following functions are treated differently in emulation than when running on a Windows CE device:

ClientToScreen();
ScreenToClient();
MoveWindow();

CreateDIBSection cannot be used to create 2-bits-per-pixel bitmaps when running in emulation.

The SipShowIM function requires an undocumented flag, SIPF_DOCKED, to work properly under emulation. Use a C bitwise OR operator to combine the SIPF_DOCKED flag with the SIPF_ON flag to display an input panel, and combine SIPF_DOCKED with SIPF_OFF to hide an input panel. This combination of flags works both for emulation and for Windows CE-Based devices.

If the size of a buffer containing region data is smaller than required, GetRegionData indicates a failure by returning 0 instead of the number of bytes needed.

The information stored in the lParam of a WM_CREATE message may not match the values that were specified in the call to the CreateWindow function. This is because the Windows NT and Windows CE window managers use style bits differently.

If you set the display on the host machine to 65,536 colors, the dividers for menu sections and the column heading buttons may display different colors than expected.

Because emulation is based on the underlying Win32 APIs running on Windows NT, the bmWidthBytes structure used by the CreateDIBSection function may return values that are consistent with Windows NT and inconsistent with Windows CE.

The CreateDIBPatternBrushPt function may return the incorrect brush style and color.

The GetTextMetrics function may return the incorrect font height.

When programming in Visual Basic for Windows CE, a form window or input panel can disappear behind the Active Desktop. To cause the form window to reappear, press ALT+TAB. To cause the input panel to reappear, press ALT+TAB or select the keyboard icon on the task bar.

When running Visual Basic for Windows CE, a form window clicking the keyboard icon on the task bar will bring the input panel back.

PC-Link

Microsoft® ActiveSync™ 3.0 supports one Windows CE connection at a time. If the device is engaged in a successful PC-Link session, and a second PC-Link session is attempted from another device, then the second PC-Link session fails. A dialog is shown that states: “Cannot start communications with the desktop computer. The computer is not available or busy and currently cannot accept connections.” If the currently connected session is terminated and the failed connection is re-attempted, it will succeed.

Notes for eMbedded Visual Basic 3.0

What's New for eMbedded VB 3.0

Known Issues for eMbedded VB 3.0

The following section lists the known issues and limitations of this release.

Emulation

When the SIPBehavior property is set to SIPAlways, you are still able to close down the input panel. The expected behavior is that you should not be able to close down the input panel with the input panel icon.

Intrinsic Controls

All Controls: The focus rectangle is not displayed and you cannot visually determine which control has focus.

TextBox: Text always appears left-aligned at runtime. The runtime is ignoring the alignment property.

Form.Load: Use caution with the code used in the Form.Load event routine. Things like MsgBox, Form.Controls collection, and Form.ActiveControl may behave erratically due to the fact that the form is not initialized yet.

Label: No border appears at runtime when the BorderStyle property is set to “1- Fixed Single.”

Frame: The Frame_DblClick event is not occurring. Instead, the Click event fires twice.

KeyPress Events: The Key events (KeyUp, KeyPress, and KeyDown) are all firing when the stylus is released from a key. If a key is pressed and held down, no events occur.

ActiveX Controls

When the FontSize property is set to negative values a large positive number is stored for the FontSize. This effects the following ActiveX controls: ListView, TreeView, TabStrip, and CommonDialog.

CommonDialog: The DefaultExt property is not being added to the file name after clicking the Save button in a Common Save dialog. If a name is entered without an extension, no extension is added.

CommonDialog: The DialogTitle property does not change the dialog title of the Open or Save as Common Dialog. The dialog titles for both are always the same.

CommonDialog: Writing to the FileName property at runtime should set an initial file and/or directory; however, only the My Documents folders are displayed. In fact, setting a valid filename from the My Documents folder does not select that file from the rest.

Grid: The RowHeightMin property is adding 5 to the value assigned to it. For example, if the property is set to 100, the value 105 is returned when read.

MenuBar: Firing events on top level menus is not supported. Instead, you can use a button with a caption and intercept the ButtonClick.

MenuBar: NewButton's definition in the MenuBar library does not state that it is read only. In the IDE, intellisense finishes an assignment statement in code with the options of True and False. However, an error is generated if True or False is assigned to the NewButton property at runtime.

MenuBar: The Object Property and Index Property are not supported, even though they show up in intellisense.

TreeView: Displaying a Form on the NodeClick event does not make the new form active. Instead the new form is placed behind the current active form. Actually the new form is shown, but focus is then passed immediately back to TreeView form bringing it to the foreground.

TreeView: If you have a TreeView control that contains at least one Node and another control (e.g., a TextBox) the NodeClick event is fired before the LostFocus event of the additional control (e.g, the TextBox).

TreeView: A node can be added to a TreeView control with an invalid Relative parameter. This could cause problems based upon what the Relationship parameter is set to. The node may appear in a different order or level then it's supposed to appear.

TreeView: Changing a TreeView node's Image property at runtime only changes the image if that node does not have focus. Also, after the Image has changed, refocusing on the node returns the Image to the original one.


Game API for Pocket PC

The Pocket PC Game API (GAPI) provides solutions for developers who want to write high-performance, real-time games for Microsoft® Windows® CE-based devices.

GAPI can be found on the Pocket PC SDK CD in the following directory for both eMbedded Visual C++ and eMbedded Visual Basic.

[CD root]\<Pocket PC SDK folder>\support\GameAPI

To avoid conflicts between games and future versions of GAPI, developers should redistribute the Game API in their local application directory--not in \windows. This is easily facilitated because the GAPI .dll, gx.dll, is small in size, at approximately 8k, and is the only .dll distributed in this manner.

x86 Emulator Support Notes

The x86 emulator support has been added as a project compiling convenience only. The Pocket PC Game APIs are not supported and do not work under the x86 emulator.

Game API Documentation

Documentation for the Game API is located in the Pocket PC Help files. Please familiarize yourself with GAPI programming concepts in Using the Pocket PC Game API and the Pocket PC API Reference before you attempt to use the Game APIs.

Due to the evolving nature of GAPI at the time that the Help documentation was created, a few API are mentioned that either are not included in the GAPI header, gx.h, or have changed names. The following API mentioned in the documentation do not exist in the gx.h header.

Instead, use the following defined API.

ActiveX for Windows CE

Using Ambient Fonts and Properties

The Windows CE ActiveX Control Test Container supports ambient fonts and ambient backcolor properties, but you need to use VB script to set them. For example, you can use the following VB script to set the ambient font property:

Form1.Font="Tahoma"
Form1.Font.Size=12

You cannot specify font information for an ActiveX Control while in design mode. Use VB script to change or add font information for an ActiveX control. The following example shows how to add font information with VB script.

Form1.Smile1.Font="Tahoma"
Form1.Smile1.Font.Size=14
Form1.Smile1.Font.Italic=TRUE

The changes you make while in Design mode to the Height and Width properties of an ActiveX control do not appear in Run mode. You can modify the height and width of an ActiveX control during Run mode.

Converting a Windows CE ActiveX Control to a Windows Desktop Version

Microsoft eMbedded Visual C++ 3.0 no longer enables you to insert Windows CE ActiveX controls into the Resource Editor through emulation. You can now create desktop versions of your controls to insert into the Resource Editor.

To convert a Windows CE ActiveX control to a desktop version

  1. Write down the names of the source code files in the original projects. These files should have the following extensions: .cpp, .h, .odl, .idl, .rc, and .def.
  2. Create a Win32 version of the control project with the same name as the original control. For MFC controls, use the MFC ActiveX ControlWizard. For ATL controls, use the ATL COM AppWizard.
  3. Except for Stdafx.cpp, delete all source files, headers, and dependencies from the project and close the project workspace.
  4. Because you need to put the new .dsp and .dsw files in the same directory as the original control project, rename the .dsp and .dsw files. For example, if the original project name is Grid, then rename your files to Grid_win32.dsp and Grid_win32.dsw.
  5. With a text editor, open the .dsw file in Visual Studio and close the .dsw file when finished editing.
  6. Copy the .dsp and .dsw files to the original project directory. This directory contains the original .vcp and .vcw files, plus the source files.
  7. Open the new .dsw file in Visual Studio as a workspace and add the files from step 1 to this project.
  8. Verify that the output control name is the same as the original project name, such as Grid.ocx rather than Grid_win32.ocx. This control name is specified in project, settings, link, and output file names.
  9. You may need to change the project source code to account for Unicode and ASCII string usage--Windows CE is Unicode only, and Windows 95/98 is ASCII only--and to account for the differences between the Windows CE and Windows desktop operating systems.

ActiveX Controls Properties Interface Limitations

In Visual C++, you can use an ActiveX control's property dialog box to add font and color property pages, which you can then view in the resource editor. You cannot do this for Windows CE ActiveX controls.

Inserting ActiveX Controls into Dialog Boxes

If you insert an ActiveX control into a dialog box by right-clicking and choosing Insert ActiveX Controls, some events may not work at run time for the control. Use the following procedure to insert ActiveX controls that work properly.

To insert ActiveX controls that work at run time

  1. Insert the desktop version of the control in the dialog box by using the Components and Control gallery.
  2. Use the Class Wizard to create a member variable called, for example, m_Polygon.
  3. Insert the following code into the OnInitDialog function.
    BOOL CPolyCntrDlg::OnInitDialog()
    {
    ...
    ATLConnectSinks(&amp;m_Polygon); 
    ...
    }
    

ActiveX samples cause assertion failure on exit (MIPS only)

This is still under investigation and this will be fixed in the final release.

Notes for Data Access for Windows® CE 3.0

Data Access for Windows® CE now consists of ActiveX Data Objects for Windows® CE (ADOCE) version 3.0, OLE DB for Windows® CE, OLE DB for Windows® CE Software Development Kit (SDK), and the OLE DB Simple Provider (OSP) Toolkit.

This section contains information on the following topics.

What's New for Data Access for Windows® CE 3.0

Installation

Data synchronization: For database synchronization between the device and the desktop to function properly with Data Access for Windows® CE version 3.0, you need to install ActiveSync version 3.1 which is included with this release.

Installed files: Before using this SDK, be sure to download the newer ADOCE and related files from this SDK onto your device. The versions of the components in ROM on these devices are slightly out-of-date. Several of the files that need to be downloaded to your device must be registered on the device. To register a component on a device, use the Control Manager in eMbeddded Visual Basic, or use the Regsvrce.exe utility. For information on how to use the Regsvrce.exe utility, see documentation in the eMbedded Visual Basic 3.0 Release Notes.

The following table shows the components that are required to be downloaded to the device and notes if they need to be registered on the device.

Component file Needs to be registered?
Adoce30.dll Yes
Adocedb30.dll No
Adoceoledb30.dll Yes
Adosync.dll Yes
Fileosp.dll Yes
Msdadc.dll Yes
Msdaer.dll Yes
Msdaeren.dll No
Msdaosp.dll Yes

Documentation: Documentation for the ADOCE version 3.0 control can be found in both the Data Access SDK and in the Pocket PC documentation collection. The correct file is named ADOCE30.chm. Documentation for the OLE DB SDK and the OSP Toolkit are located near the ADOCE documentation.

Known Issues for Data Access for Windows® CE 3.0

The following lists describe the known issues and limitations of this release.

CEDB Provider - *.cdb databases

File OSP Provider Sample – FileOSPSample.dll

The following errors occur when the FileOSPSample provider is used.

General

Recordset.Move 1 on an empty recordset causes an unexpected error when CursorType is adOpenForwardOnly, and the LockType is adLockUnspecified. The expected returned error is adErrNoCurrentRecord. The actual returned error is: “0x80040E29: The rowset cannot scroll backwards.”

Debugging Control Applets in Windows CE

Control panel applets are dynamic-link libraries. To debug these files on Windows CE, you must create an .exe file that loads a particular .cpl or .dll. In the Debug function on the Project, Settings menu, the Executable for debug session and Remote executable path and file name edit boxes should contain the name of the .exe file. The Additional DLLs box should specify the .cpl or .dll.

Additional Documentation

If you have accepted the default directories when installing Microsoft eMbedded Visual Tools, additional documentation can be found in the following locations:

Subject Area Path and File Name
Installation and Setup C:\Program Files\Microsoft eMbedded Tools\README.HTM
eMbedded Visual Basic C:\Program Files\Microsoft eMbedded Tools\EVB\releasenotes.htm
eMbedded Visual C++ C:\Program Files\Microsoft eMbedded Tools\EVC\releasenotes.htm
SDK: H/PC Pro C:\Windows CE Tools\hpcproreadme.htm
SDK: Palm-size PC 1.2 C:\Windows CE Tools\pspc12readme.htm
SDK: Pocket PC C:\Windows CE Tools\pocketpcreadme.htm

Legal Information

Information in this document, including URL and other Internet Web site references, is subject to change without notice. Unless otherwise noted, the example companies, organizations, products, people and events depicted herein are fictitious and no association with any real company, organization, product, person or event is intended or should be inferred. Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Microsoft Corporation.

Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from Microsoft, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property.

© 2000 Microsoft Corporation. All rights reserved.

Microsoft, MS-DOS, Windows, Windows NT, and ActiveSync are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.

The names of actual companies and products mentioned herein may be the trademarks of their respective owners.